export class ColorUtil {

    public static hslToHex(h: number, s: number, l: number): string {
        // 参数边界处理
        h = ((h % 360) + 360) % 360; // 标准化色相到 [0,360)
        s = Math.min(100, Math.max(0, s));
        l = Math.min(100, Math.max(0, l));

        // 转换为 0-1 的小数
        const _s = s / 100;
        const _l = l / 100;

        // 当亮度为 0 或 1 时直接返回黑色/白色
        if (_l === 0) return '#000000';
        if (_l === 1) return '#ffffff';

        // HSL 转 RGB 的核心算法
        const c = (1 - Math.abs(2 * _l - 1)) * _s;
        const x = c * (1 - Math.abs(((h / 60) % 2) - 1));
        const m = _l - c / 2;

        let r = 0, g = 0, b = 0;

        if (h < 60) {
            [r, g, b] = [c, x, 0];
        } else if (h < 120) {
            [r, g, b] = [x, c, 0];
        } else if (h < 180) {
            [r, g, b] = [0, c, x];
        } else if (h < 240) {
            [r, g, b] = [0, x, c];
        } else if (h < 300) {
            [r, g, b] = [x, 0, c];
        } else {
            [r, g, b] = [c, 0, x];
        }

        // 转换为 0-255 的 RGB 值
        const toHex = (n: number) => {
            const value = Math.round((n + m) * 255);
            return value.toString(16).padStart(2, '0');
        };

        return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
    }


}